Оператор [break]

картинка

Описание

Логические узлы правила обрабатываются последовательно — от первого до последнего. Если нет необходимости обрабатывать все узлы, можно воспользоваться оператором [break], который прерывает обработку текущего правила при определённых условиях. Оператор [break], как правило, размещается последним в списке операторов узла. Если [break] возвращает true, следующие узлы правила не выполняются.

Пример

В примере ниже в первом узле определяется наличие SIM-карты в слоте. Если её нет, то нет смысла проверять уровень сигнала во втором узле — GSM-модем не зарегистрирован.

-- Узел "N1_sim_found"
----------------------
-- Проверить что Сим-карта находится в слоте
N1_sim_found = {                               -- Создаём логический узел "simfound"
    {                                        
        ["load-ubus"] = function (nodes)       -- Оператор [load-ubus] через системную шину     
            return {                           -- получает от GSM-модема статус наличия
                object = "tsmodem.driver",     -- сим-карты в слоте
                method = "cpin",               -- Результат:
                params = {},                   -- {
            }                                  --    "value": "true",
        end,                                   --    "updated": "1773160342"
    },                                         --    "changed": "1773160300"
                                               -- }
    {                                          ----------------------
        ["break"] = function(nodes)            -- Оператор ["break"]
                                               ----------------------
            local sim_not_found = (nodes.N1_sim_found == false)
            if sim_not_found then
                return true                    -- Если сим-карта не найдена в слоте,
            else                               -- то нет смысла выполнять следующий узел
                return false                   -- "N2_cellular_signal_strength".
            end                                -- Поэтому оператор ["break"] прерывает
        end                                    -- дальнейшую обработку правила
    }
}
 
-- Узел "N2_cellular_signal_strength"
--------------------------------------
-- Получить посредством шины UBUS значение уровня сигнала до базовой станции
N2_cellular_signal_strength = {
    {
        ["load-ubus"] = function(nodes)
            return {
                ubus = "tsmodem",              -- Имя объекта на шине
                method = "signal",             -- Вызываемый метод
                params = {},                   -- без параметров
            }
        end
    },
}

Примечание

Если оператор [break] сработал в текущем правиле, обработка передаётся следующему правилу в рамках данной итерации.